#include<stdio.h>
#include<assert.h>
#include<string.h>
#include<unistd.h>
#include<sys/wait.h>
#include<sys/types.h>

#include<iostream>
using namespace std;

#define MAXCOMAND 1024
#define ARGC 64
#define SEP " "


int split(char *comand,char*argv[])
{
  assert(comand);
  assert(argv);
  
  int i=0;
  argv[0]=strtok(comand,SEP);
  if(argv[0]==NULL)
  {
    return -1;
  }
  i=1;
  for(;argv[i]=strtok(NULL,SEP);++i);
}

void DebugPrint(char*argv[])
{
  for(int i=0;argv[i];++i)
  {
    cout<<argv[i]<<endl;
  }
}


int main()
{
  while(1)
  {
    printf("[myshell@test]# ");
    fflush(stdout);
    char comand[MAXCOMAND]={0};
    char*s= fgets(comand,MAXCOMAND,stdin);//s用来判断是否正确输入
    assert(s);
    (void)s;//保证在release版本发布的时候，因为去掉了assert，所以没有用s，而带来的编译警告，什么都没有做
    comand[strlen(comand)-1]='\0';//去掉末尾的'\n'
   // printf("%s\n",comand);
   
    //分割字符串
    char*argv[ARGC]={NULL};
    split(comand,argv);
    //DebugPrint(argv);
   
    //创建子进程
    pid_t id= fork();
    assert(id>=0);
    (void)id;

    if(id==0)
    {
      //子进程
      execvp(argv[0],argv);
      exit(0);
    }

    int status=0;
    waitpid(id,&status,0);
    
  }


  return 0;
}
